#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
autor: joão pedro brites raposo alexandre
data criação: 2011/11/23
linguagem: python
modulo: http server
versão: v1.0
'''

import SimpleHTTPServer
import SocketServer
import time
import csv
import webbrowser


#class to operate with http service
class Http:


    #class contructor
    def __init__(self):
        pass

    #-----------------------------------------------------------------
    #metodo para correr o servidor http server
    #-----------------------------------------------------------------    
    def run_http_server(self):
        PORT = 8000
        Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
        httpd = SocketServer.TCPServer(('', PORT), Handler)        
        print "HTTP serving at port", PORT
        httpd.serve_forever()
        

    #-----------------------------------------------------------------
    #metodo para parar o servidor http server
    #----------------------------------------------------------------- 
    def stop_http_server(self):
        self.server.kill()
        print "HTTP server stopped"       


    #----------------------------------------------------------------- 
    #metodo para abrir o browser em http://27.0.0.1:8000 (index.html)
    #-----------------------------------------------------------------  
    def html_Open(self):
        PORT = 8000
        Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
        httpd = SocketServer.TCPServer(('', PORT), Handler)        
        print "HTTP serving at port", PORT

        url = 'http://127.0.0.1:8000/'
        webbrowser.open(url)
        httpd.serve_forever()

    #----------------------------------------------------------------- 
    #metodo para abrir o bowser com consulta 1 ou total 1
    #----------------------------------------------------------------
    def create_html_file_with_search_1(self, file_name, structure):
        
        try:
            print 'criando ficheiro index.html...'
            t1 = time.clock()
            ficheiro = file('index.html', 'w')
            #estrutura html para 1
            if structure == 1:
                label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                        <h4>Consulta de professores por estabelecimento de ensino e por ano</h4>\
                        <table border="1" align="center" width="100%">\
                        <tr>\
                        <th>ANO</th><th>INSTITUIÇÃO</th><th>PROFESSORES</th>\
                        </tr>'
                ficheiro.write(label)
                pass
            #estrutura html para 2
            elif structure == 2:
                label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                        <h4>Consulta do total de professores por estabelecimento de ensino e por ano</h4>\
                        <table border="1" align="center" width="100%">\
                        <tr>\
                        <th>ANO</th><th>INSTITUIÇÃO</th><th>PROFESSORES</th>\
                        </tr>'
                ficheiro.write(label)
                pass
            spamReader = csv.reader(open(file_name, 'rb'), delimiter=',')
            #dados html
            for row in spamReader:
                label ='<tr>\
                        <td>' + str(row[0]) + '</td>\
                        <td>' + str(row[1]) + '</td>\
                        <td>' + str(row[2]) + '</td>\
                        </tr>'
                ficheiro.write(label)
                pass
            ficheiro.write('</table>')
            label_2 = '</body></html>'
            ficheiro.write(label_2)
            ficheiro.close()
            t2 = time.clock()
            print 'tempo =', t2-t1
            print 'ficheiro index.html ok.'
            pass
        except:
            print 'ficheiro de consulta não encontrado'
            pass        


    #----------------------------------------------------------------- 
    #metodo para abrir o bowser com consulta 2 ou total 2
    #-----------------------------------------------------------------
    def create_html_file_with_search_2(self, file_name, structure):
        
        try:
            print 'criando ficheiro index.html...'
            t1 = time.clock()
            ficheiro = file('index.html', 'w')
            #estrutura html para 1
            if structure == 1:
                label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                        <h4>Consulta de professores por categoria, por estabelecimento de ensino e por ano</h4>\
                        <table border="1" align="center" width="100%">\
                        <tr>\
                        <th>ANO</th><th>INSTITUIÇÃO</th><th>CATEGORIA</th><th>PROFESSORES</th>\
                        </tr>'
                ficheiro.write(label)
                pass
            #estrutura html para 2
            elif structure == 2:
                label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                        <h4>Consulta do total de professores por categoria, por estabelecimento de ensino e por ano</h4>\
                        <table border="1" align="center" width="100%">\
                        <tr>\
                        <th>ANO</th><th>INSTITUIÇÃO</th><th>CATEGORIA</th><th>PROFESSORES</th>\
                        </tr>'
                ficheiro.write(label)
                pass
            spamReader = csv.reader(open(file_name, 'rb'), delimiter=',')
            #dados html
            for row in spamReader:
                label ='<tr>\
                        <td>' + str(row[0]) + '</td>\
                        <td>' + str(row[1]) + '</td>\
                        <td>' + str(row[2]) + '</td>\
                        <td>' + str(row[3]) + '</td>\
                        </tr>'
                ficheiro.write(label)
                pass
            ficheiro.write('</table>')
            label_2 = '</body></html>'
            ficheiro.write(label_2)
            ficheiro.close()
            t2 = time.clock()
            print 'temp =', t2-t1
            print 'ficheiro index.html ok.'
            pass
        except:
            print 'ficheiro de consulta não encontrado'
            pass             



    #----------------------------------------------------------------- 
    #metodo para abrir o bowser com consulta 3 ou total 3
    #-----------------------------------------------------------------
    def create_html_file_with_search_3(self, file_name, structure):
        
        try:
            print 'criando ficheiro index.html...'
            t1 = time.clock()
            ficheiro = file('index.html', 'w')
            #estrutura html para 1
            if structure == 1:
                label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                        <h4>Consulta de professores por último grau, por estabelecimento de ensino e por ano</h4>\
                        <table border="1" align="center" width="100%">\
                        <tr>\
                        <th>ANO</th><th>INSTITUIÇÃO</th><th>ÚLTIMO GRAU</th><th>PROFESSORES</th>\
                        </tr>'
                ficheiro.write(label)
                pass
            #estrutura html para 2
            elif structure == 2:
                label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                        <h4>Consulta do total de professores por último grau, por estabelecimento de ensino e por ano</h4>\
                        <table border="1" align="center" width="100%">\
                        <tr>\
                        <th>ANO</th><th>INSTITUIÇÃO</th><th>LTIMO GRAU</th><th>PROFESSORES</th>\
                        </tr>'
                ficheiro.write(label)
                pass
            spamReader = csv.reader(open(file_name, 'rb'), delimiter=',')
            #dados html
            for row in spamReader:
                label ='<tr>\
                        <td>' + str(row[0]) + '</td>\
                        <td>' + str(row[1]) + '</td>\
                        <td>' + str(row[2]) + '</td>\
                        <td>' + str(row[3]) + '</td>\
                        </tr>'
                ficheiro.write(label)
                pass
            ficheiro.write('</table>')
            label_2 = '</body></html>'
            ficheiro.write(label_2)
            ficheiro.close()
            t2 = time.clock()
            print 'tempo =', t2-t1
            print 'ficheiro index.html ok.'
            pass
        except:
            print 'ficheiro de consulta não encontrado'
            pass


    #----------------------------------------------------------------- 
    #metodo para abrir o bowser com grafico 1
    #-----------------------------------------------------------------
    def create_html_file_with_grafic_1(self, file_name):

        try:
            print 'criando ficheiro index.html...'
            t1 = time.clock()
            ficheiro = file('index.html', 'w')
            
            #estrutura html para 1
            label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                      <h4>Gráfico com o total de professores por estabelecimento e por ano</h4>\
                      <table border="1" align="center" width="100%">\
                      <img src="{0}" alt="gráfico" />'.format(file_name)
            ficheiro.write(label)
            label_2 = '</body></html>'
            ficheiro.write(label_2)
            ficheiro.close()
            t2 = time.clock()
            print 'tempo =', t2-t1
            print 'ficheiro index.html ok.'

        except:
            print 'ficheiro de grafico não encontrado'
            pass



    #----------------------------------------------------------------- 
    #metodo para abrir o bowser com total html tags
    #----------------------------------------------------------------
    def create_html_file_with_search_tags(self, file_name):

        try:
            print 'criando ficheiro index.html...'
            t1 = time.clock()
            ficheiro = file('index.html', 'w')
 
            label = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>\
                    <h4>Consulta com total de html tags numa página web</h4>\
                    <table border="1" align="center" width="100%">\
                    <tr>\
                    <th>TAGS</th><th>QUANTIDADE</th>\
                    </tr>'
            ficheiro.write(label)

            spamReader = csv.reader(open(file_name, 'rb'), delimiter=',')
            #dados html
            for row in spamReader:
                label ='<tr>\
                        <td align="center">' + str(row[0]) + '</td>\
                        <td align="center">' + str(row[1]) + '</td>\
                        </tr>'
                ficheiro.write(label)
                pass
            ficheiro.write('</table>')
            label_2 = '<tr>\
                        <h4>Gráfico com total de html tags numa página web</h4>\
                        <img src="grafico_4.png" alt="grafico"/>\
                        </body></html>'
            ficheiro.write(label_2)
            ficheiro.close()
            t2 = time.clock()
            print 'tempo =', t2-t1            
            print 'ficheiro index.html ok.'
            pass
        except:
            print 'ficheiro de consulta não encontrado'
            pass
 
